package com.words.untils;

import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTCreator;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.exceptions.JWTVerificationException;
import com.auth0.jwt.interfaces.DecodedJWT;
import com.auth0.jwt.algorithms.Algorithm;
import com.words.entity.User;
import org.springframework.stereotype.Component;

import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

@Component
//认证服务
public class JwtTokenUtils {
    private final int EXPIRE_TIME = 5 * 60 * 1000;  // 过期时间5分钟
    private final String SECRET_KEY = "123"; // 加密的密钥<------绝不能告诉其他人


    //生成token
    public String getToken(Map<String, String> map) {

        Calendar instance = Calendar.getInstance();
        instance.add(Calendar.DATE, 7);//token令牌，默认7天过期

        JWTCreator.Builder builder = JWT.create();

        //将map中的所有信息放在payload中
        map.forEach(builder::withClaim);

        String token = builder.withExpiresAt(instance.getTime())//指定令牌过期时间
                .sign(Algorithm.HMAC256(SECRET_KEY));//token加密方式，及使用的密钥

        return token;
    }

    //验证token,并提取token的信息
    //token若错误，则抛出异常
    //若正确，则返回提取的信息
    public DecodedJWT verity(String token) {
        return JWT.require(Algorithm.HMAC256(SECRET_KEY)).build().verify(token);
    }

    public String getVByToken(String token, String k) {
        DecodedJWT verity = verity(token);
        return verity.getClaim(k).asString();
    }
}
